#[243]读取前十行
import pandas as pd
df = pd.read_excel('豆瓣高评分书籍信息.xlsx')
pd.set_option('display.max_columns', None)
pd.set_option('display.width', 200)
pd.set_option('display.unicode.east_asian_width', True)  # 中文对齐
print(df.head(10))
#[244]查看数据基本信息（类似df.info()的效果，包含缺失值、数据类型等）并统计各列缺失值数量
file_path = "豆瓣高评分书籍信息.xlsx"
df = pd.read_excel(file_path, sheet_name=0)
print("=== 数据框基本信息 ===")
df.info()
print("\n=== 各列缺失值数量 ===")
print(df.isnull().sum())
#[245]将”数“改成”页数“
df = pd.read_excel('豆瓣高评分书籍信息.xlsx')
df = df.rename(columns={'数': '页数'})
df.to_excel('豆瓣高评分书籍信息.xlsx', index=False)
#[246]设置索引
df = pd.read_excel('豆瓣高评分书籍信息.xlsx')
import pandas as pd
file_path = "豆瓣高评分书籍信息.xlsx"
df = pd.read_excel(file_path)
df = df.reset_index()
df.to_excel("带索引的书籍数据.xlsx", index=False)
print("索引设置完成！")
# [247]查看矩阵形状
print(df.shape)
#[248] 查看评分的统计信息
df = pd.read_excel('豆瓣高评分书籍信息.xlsx')
print(df['评分'].describe())
#将[249]未知替换成NaN
import numpy as np
df = pd.read_excel('豆瓣高评分书籍信息.xlsx')
df = df.replace('未知', np.nan)
df.to_excel('豆瓣高评分书籍信息_替换后.xlsx', index=False)
# [250]查看每一列的缺失值数量
df = pd.read_excel('豆瓣高评分书籍信息.xlsx')
print(df.isnull().sum())
#[251]删除名为"ISBN"的列
df = pd.read_excel('带索引的书籍数据.xlsx')
df = df.drop('ISBN', axis=1)
df.to_excel('带索引的书籍数据_去掉ISBN列.xlsx', index=False)
#[252]删除所有列含未知字样的行，并且重制索引
import pandas as pd
df = pd.read_excel('带索引的书籍数据_去掉ISBN列.xlsx')
df = df[~(df == '未知').any(axis=1)]
df.to_excel('带索引的书籍数据_去掉ISBN列、未知(新).xlsx', index=False)
file_path = "带索引的书籍数据_去掉ISBN列、未知(新).xlsx"
df = pd.read_excel(file_path)
df = df.reset_index()
df.to_excel("带索引的书籍数据(新).xlsx", index=False)
print("索引设置完成！")
#[253]检查是否含有未知字样
df = pd.read_excel('带索引的书籍数据(新).xlsx')
#[254]
df.shape
print(df.isnull().sum())
#[255]为了便于统计，通过正则提取出版时间的年份
import pandas as pd
import re
file_path = "带索引的书籍数据(新).xlsx"
df = pd.read_excel(file_path)
def extract_year(pub_time) :
    if pd.isna(pub_time) or not isinstance(pub_time, str):
        return None
    match = re.search(r'\b\d{4}\b', pub_time)
    if match:
        return match.group()
    else:
        return "未提取到年份"
df["年份"] = df["出版时间"].apply(extract_year)
cols = df.columns.tolist()
pub_time_index = cols.index("出版时间")
cols.insert(pub_time_index + 1, cols.pop(cols.index("年份")))
df = df[cols]
df.to_excel("提取年份后的书籍数据.xlsx", index=False)
print("年份提取完成，已新增‘年份’列！")
#[256]
print(df.head())
#[257]将出版时间转换为整数型
import pandas as pd
import re
file_path = "提取年份后的书籍数据.xlsx"
df = pd.read_excel(file_path)
def extract_year_to_int(pub_time):
    if pd.isna(pub_time) or not isinstance(pub_time, str):
        return None
    match = re.search(r'\b\d{4}\b', pub_time)
    if match:
        try:
             return int(match.group())
        except:
            return"转换失败"
        else:
            return"未找到年份"
df["出版时间"] = df["出版时间"].apply(extract_year_to_int)
df.to_excel("出版时间替换为整型的书籍数据.xlsx", index=False)
print("原‘出版时间’列已替换为整数年份！")
#[258]
print(df.head())
#[259]
print(df.shape)
#[260]转换评分及平均数量的数据类型
df['评分']=df['评分'].astype(float)
def clean_comment_count(value):
    if pd.isnull(value):
        return np.nan
    value_str = str(value).strip()
    match = re.search(r'\d+', value_str)
    if match:
        return int(match.group())
    else:
        return np.nan
df['评论数量'] = df['评论数量'].apply(clean_comment_count)
df['评论数量'] = df['评论数量'].astype('Int64')
df.to_excel('转换评分及评论数量数据类型的书籍信息.xlsx', index=False)
#[261]# 查看页数是否含有小数点的情况
df = pd.read_excel('转换评分及评论数量数据类型的书籍信息.xlsx')
def check_decimal_in_page(df, page_column_name):
    if page_column_name not in df.columns:
        print(f"列 '{page_column_name}' 不存在于表格中")
        return
    page_data = df[page_column_name]
    numeric_page = pd.to_numeric(page_data, errors='coerce')
    has_decimal = (numeric_page % 1 != 0).any()

    if has_decimal:
        print(f"列 '{page_column_name}' 中存在带小数点的页数")
        decimal_rows = df[numeric_page % 1 != 0][[page_column_name]]
        print("具体带小数的页数：")
        print(decimal_rows)
    else:
        print(f"列 '{page_column_name}' 中没有带小数点的页数")
if __name__ == "__main__":
    check_decimal_in_page(df, page_column_name="页数")
#【262】# 规范页数的格式，全部变成整型
import pandas as pd
file_path = "转换评分及评论数量数据类型的书籍信息.xlsx"
df = pd.read_excel(file_path)
def clean_page_column(df, page_column="页数"):
    if page_column not in df.columns:
        print(f"列 '{page_column}' 不存在")
        return df
    df_clean = df[df[page_column].astype(str).str.match(r'^\d+(\.\d+)?$', na=False)].copy()
    df_clean[page_column] = pd.to_numeric(df_clean[page_column], errors='coerce')
    removed_count = len(df) - len(df_clean)
    print(f"共移除 {removed_count} 行含非数字字符的数据")
    print(f"清洗后的数据行数：{len(df_clean)}")
    return df_clean
if __name__ == "__main__":
    cleaned_df = clean_page_column(df, page_column="页数")
    cleaned_df.to_excel("清洗页数后的表格.xlsx", index=False)
#[263]
print(cleaned_df)
#[266,267,268]规范价格的格式，去除价格不是纯数字的数据
import pandas as pd
import re
df = pd.read_excel('清洗页数后的表格.xlsx')

def clean_comment_count(value):
    if pd.isnull(value):
        return pd.NA
    value_str = str(value).strip()
    match = re.search(r'\d+\.\d+', value_str)
    if match:

        return float(match.group())
    else:
        return pd.NA
df['价格'] = df['价格'].apply(clean_comment_count)
df['价格'] = df['价格'].astype('Float64')
df.to_excel('豆瓣高评分书籍信息_价格规范后(新).xlsx', index=False)
#[269]将价格低于1元的书籍去除
import pandas as pd
df = pd.read_excel('豆瓣高评分书籍信息_价格规范后(新).xlsx')
df['价格'] = pd.to_numeric(df['价格'], errors='coerce')
df = df[df['价格'] >= 1]
df = df.reset_index(drop=True)
df.to_excel('豆瓣高评分书籍信息_去除低价后.xlsx', index=False)
#[271]查找重复书名
import pandas as pd
df = pd.read_excel('豆瓣高评分书籍信息_去除低价后.xlsx')
duplicate_titles = df[df.duplicated(subset=['书名'], keep=False)]
print(duplicate_titles)
repeated_names = df['书名'][df['书名'].duplicated()].unique()
print("重复的书名有：", repeated_names)
## [273]按评论数量降序排列
import pandas as pd
df = pd.read_excel('豆瓣高评分书籍信息_去除低价后.xlsx')
df['评论数量'] = pd.to_numeric(df['评论数量'], errors='coerce')
df = df.sort_values(by='评论数量', ascending=False)
df = df.reset_index(drop=True)
df.to_excel('数据清洗.xlsx', index=False)
df = pd.read_excel('数据清洗.xlsx')
df = df.drop('index', axis=1)
df = df.drop('level_0', axis=1)
df.to_excel('bb.xlsx', index=False)
df = pd.read_excel('bb.xlsx')
import pandas as pd
file_path = "bb.xlsx"
df = pd.read_excel(file_path)
df = df.reset_index()
df.to_excel("豆瓣高评分书籍信息-清洗完毕.xlsx.xlsx", index=False)
print("索引设置完成！")






